package br.com.fsa.aplication.Util;

import java.lang.reflect.Method;

import javax.management.InstanceAlreadyExistsException;

import br.com.fsa.aplication.Model.bean.NotaFiscal;

public class Traduzir {

	static public Object ObjetoValor(Object vo) {
		Object o = null;

		if (vo == null)
			return o;

		try {
			int qtString = vo.getClass().getSimpleName().length() - 2;
			o = Class.forName(
					"br.com.fsa.aplication.Model.bean."
							+ vo.getClass().getSimpleName()
									.substring(0, qtString)).newInstance();

			for (Method f : o.getClass().getMethods()) {
				String atributo = f.getName().substring(3);
				for (Method g : vo.getClass().getMethods())
					if (g.getName().equals("get" + atributo)
							&& f.getName().equals("set" + atributo)) {
						if (g.getReturnType().getSimpleName().contains(
								"VO")) {
							f.invoke(o, ObjetoValor(g.invoke(vo)));
							break;
						} else {
							f.invoke(o, g.invoke(vo));
							break;
						}
					}

			}

		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			return o;
		}

	}

	static public Object Entidade(Object entidade) {
		Object o = null;

		if (entidade == null)
			return o;

		try {
			o = Class.forName(
					"br.com.fsa.aplication.Model."
							+ entidade.getClass().getSimpleName() + "VO")
					.newInstance();
			for (Method f : o.getClass().getMethods()) {
				String atributo = f.getName().substring(3);
				for (Method g : entidade.getClass().getMethods())
					if (g.getName().equals("get" + atributo)
							&& f.getName().equals("set" + atributo)) {
						if (f.getParameterTypes()[0].getSimpleName().contains(
								"VO")) {
							f.invoke(o, Entidade(g.invoke(entidade)));
							break;
						} else {
							f.invoke(o, g.invoke(entidade));
							break;
						}
					}

			}

		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			return o;
		}
	}

}
